//
// port.h
// libprotea
// Tools Library for the Protea Project / Network port functionality
// Copyright (C) 2003, 2004, 2005 eXegeSys, Inc.
// Copyright (C) 2008 Bruce A. James
//
// This program is part of the Protea Project.
//
// The Protea Project is free software; you can redistribute it and/or modify it 
// under the terms of the GNU General Public License as published by the 
// Free Software Foundation, either version 3 of the License, or (at your 
// option) any later version.
//
// The Protea Project is distributed in the hope that it will be useful, but 
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
// or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 
// for more details.
// 
// You should have received a copy of the GNU General Public License along 
// with this program.  If not, see <http://www.gnu.org/licenses/>.
// 
// Please send correspondence to:
// 
// theproteaproject@gmail.com
//

#ifndef __PROTEA_PORT_H__
#define __PROTEA_PORT_H__


/*
	\file port.h
	\brief OS independent routines for handling message ports
*/

#include "pipes.h"
#include "socket.h"
#include "../AppHandler/message.h"

class __EXPORT XCPortHandler : public XCBase {
public:
	XCPortHandler();
	~XCPortHandler();

	/**
		Creates and prepares a 'port list'.
	*/
	void Create();

	/**
		Adds a 'port' to the port list
	*/
	void Add( XCMsgPort* port );

	void Close();

	/**
		Waits for activity on the 'port set'
	*/
	long Select( time_val* tv, XCMsgPort** result = NULL, int *mode = NULL);

	void Abort();

	bool HasData( XCMsgPort* );

	bool Initialized;

protected:
	void Init();
	long high_port;
	port_set ports;
};


#endif
